#include <iostream>
#include <cassert>
#include <exception>

#if 0
    int Strlen(const char *s)
    {
        // 断言：如果表达式不成立（字符串为空），会终止程序
        // 断言是在运行期判断的，一定会把程序终止，是C里面的处理方式
        assert(s != nullptr);
        // 相当于C++里的异常
        // 异常不会把程序断掉
        // if(s == nullptr)
        //     throw std::out_of_range("空指针异常!");

        int count = 0;
        while(*(s++) != '\0')
            count++;
        return count;
    }

    int main()
    {
        // const char *s = "hello";
        // std::cout << Strlen(s) << std::endl;

        const char *s = nullptr;
        std::cout << Strlen(s) << std::endl;

        return 0;
    }
#endif

#if 1
    // 静态断言（不会影响编译效率）
    constexpr int func()
    {
        const int a = 0;
        static_assert(a != 0, "a为0");
        return 10;
    }

    int main()
    {
        // 编译期进行断言
        func();
        return 0;
    }
#endif